package edu.utn.tacs.grupouno.negocio;

import java.util.Collection;
import java.util.LinkedList;

public class Analisis implements Cloneable {

	protected Collection<Estudio> estudios;
	public Collection<Estudio> getEstudios() {
		return estudios;
	}

	public void setEstudios(Collection<Estudio> estudios) {
		this.estudios = estudios;
	}

	private Medico medico;
	private Paciente paciente;

	public Paciente getPaciente() {
		return paciente;
	}

	public void setPaciente(Paciente paciente) {
		this.paciente = paciente;
	}

	public Medico getMedico() {
		return medico;
	}

	public void setMedico(Medico medico) {
		this.medico = medico;
	}

	public Analisis() {
		estudios = new LinkedList<Estudio>();
	}
	
	public void addEstudio(Estudio estudio) {
		estudios.add(estudio);
	}
	
	public void addEstudios(Collection<Estudio> estudios) {
		this.estudios.addAll(estudios);
	}
	
	/**
	 * 
	 * @return una coleccion de estudios que poseen todos sus indicadores cargados,
	 * es decir que cada uno de los indicadores posee un resultado asignado
	 */
	public Collection<Estudio> getEstudiosConIndicadoresCargados() {
		Collection<Estudio> estudiosCargados = new LinkedList<Estudio>();
		
		for (Estudio estudio : estudios) {
			if (estudio.seCargaronTodosLosIndicadores()) {
				estudiosCargados.add(estudio);
			}
		}
		
		return estudiosCargados;
	}
	
	public boolean isListo(){
		for(Estudio estudio: estudios){
			if(!estudio.seCargaronTodosLosIndicadores()) {
				return false;
			}
		}
		return true;
	}

	public void notificarMedico(){
		if (isListo()){
			medico.analisisTerminado(this);
		}
	}

	@Override
	protected Analisis clone() throws CloneNotSupportedException {
		Analisis n =(Analisis) super.clone();
		
		n.estudios=new LinkedList<Estudio>();
		for(Estudio estudio:this.estudios){
			n.estudios.add((Estudio)estudio.clone());
		}
		
		return n;
	}

}
